home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / pyshared / PIL / CurImagePlugin.py < prev    next >
Text File  |  2006-12-03  |  2KB  |  91 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: CurImagePlugin.py 2134 2004-10-06 08:55:20Z fredrik $
  4. #
  5. # Windows Cursor support for PIL
  6. #
  7. # notes:
  8. #       uses BmpImagePlugin.py to read the bitmap data.
  9. #
  10. # history:
  11. #       96-05-27 fl     Created
  12. #
  13. # Copyright (c) Secret Labs AB 1997.
  14. # Copyright (c) Fredrik Lundh 1996.
  15. #
  16. # See the README file for information on usage and redistribution.
  17. #
  18.  
  19.  
  20. __version__ = "0.1"
  21.  
  22. import string
  23.  
  24. import Image, BmpImagePlugin
  25.  
  26.  
  27. #
  28. # --------------------------------------------------------------------
  29.  
  30. def i16(c):
  31.     return ord(c[0]) + (ord(c[1])<<8)
  32.  
  33. def i32(c):
  34.     return ord(c[0]) + (ord(c[1])<<8) + (ord(c[2])<<16) + (ord(c[3])<<24)
  35.  
  36.  
  37. def _accept(prefix):
  38.     return prefix[:4] == "\0\0\2\0"
  39.  
  40. ##
  41. # Image plugin for Windows Cursor files.
  42.  
  43. class CurImageFile(BmpImagePlugin.BmpImageFile):
  44.  
  45.     format = "CUR"
  46.     format_description = "Windows Cursor"
  47.  
  48.     def _open(self):
  49.  
  50.         offset = self.fp.tell()
  51.  
  52.         # check magic
  53.         s = self.fp.read(6)
  54.         if not _accept(s):
  55.             raise SyntaxError, "not an CUR file"
  56.  
  57.         # pick the largest cursor in the file
  58.         m = ""
  59.         for i in range(i16(s[4:])):
  60.             s = self.fp.read(16)
  61.             if not m:
  62.                 m = s
  63.             elif ord(s[0]) > ord(m[0]) and ord(s[1]) > ord(m[1]):
  64.                 m = s
  65.             #print "width", ord(s[0])
  66.             #print "height", ord(s[1])
  67.             #print "colors", ord(s[2])
  68.             #print "reserved", ord(s[3])
  69.             #print "hotspot x", i16(s[4:])
  70.             #print "hotspot y", i16(s[6:])
  71.             #print "bytes", i32(s[8:])
  72.             #print "offset", i32(s[12:])
  73.  
  74.         # load as bitmap
  75.         self._bitmap(i32(m[12:]) + offset)
  76.  
  77.         # patch up the bitmap height
  78.         self.size = self.size[0], self.size[1]/2
  79.         d, e, o, a = self.tile[0]
  80.         self.tile[0] = d, (0,0)+self.size, o, a
  81.  
  82.         return
  83.  
  84.  
  85. #
  86. # --------------------------------------------------------------------
  87.  
  88. Image.register_open("CUR", CurImageFile, _accept)
  89.  
  90. Image.register_extension("CUR", ".cur")
  91.